class Solution {
public:
    void nextPermutation(vector<int>& nums) {
        // 从后往前找出第一对前小后大的数，然后交换
        // 再从该位置往后进行排序即可
        for(int i = nums.size() - 2; i >= 0; i--)
        {
            for(int j = nums.size() - 1; j > i; j--)
            {
                if(nums[i] < nums[j])
                {
                    swap(nums[i], nums[j]);
                    sort(nums.begin() + i + 1, nums.end());
                    return;
                }
            }
        }
        // 找不出那对数说明没有下一个排列，直接逆置变成最小排列
        reverse(nums.begin(), nums.end());
    }
};